 /* 
 * Copyright 2013 Dominik Korittki, Steffen Gruschka

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package beans;

import entity.Nutzer;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;

/**
 * Bean, welcher für alle Seiten zur Verfügung steht.
 * Gibt Informationen über den aktuell eingeloggten Nutzer aus.
 * @author Dominik K
 * @author Steffen G
 */
@ManagedBean
@SessionScoped
public class SessionNutzer {
    
    private String name;
    private boolean admin;
    private boolean mitarbeiter;
    
    /**
     * Erstellt eine neue Instanz eines Nutzers
     */
    public SessionNutzer() {
    }
    
    /**
     * Liefert das name Objekt
     * @return Das Objekt
     */
    public String getName() {
        return name;
    }
    
    /**
     * Hat Rechte zum Anlegen von Mitarbeiter und Räumen
     * @return true falls Adminrechte, false falls nein
     */
    public boolean isAdmin() {
        leseNutzer();
        return admin;
    }
    
    /**
     * Hat Rechte zum Lesen von Informationen
     * @return true falls Leseberechtigung, false falls nein
     */
    public boolean isBasic() {
        leseNutzer();
        return mitarbeiter;
    }
    
    /**
     * Erneuert die Rechteinformationen
     */
    public void leseNutzer() {
        if (name == null) {
            ExternalContext ectx = FacesContext
            .getCurrentInstance().getExternalContext();
            name = ectx.getRemoteUser();
            if (ectx.isUserInRole("administrator")) {
                admin = true;
            }
            if (ectx.isUserInRole("mitarbeiter")) 
            { 
                mitarbeiter = true;
            }
        }
    }
    
    /**
     * Terminiert die Session des zurzeit eingelogten Benutzers
     * @param nutzer Aktuell eingeloggter Nutzer
     */
    public static void logout(SessionNutzer nutzer) {
        ExternalContext ectx = FacesContext.getCurrentInstance().getExternalContext();
        ectx.invalidateSession();
        nutzer = null;
    }
}
